const install = (Vue) => {

	/**
	 * 拨打电话
	 * @param {String} phoneNumber - 手机号码 
	 * */
	Vue.prototype.callPhone = (phoneNumber) => {
		uni.makePhoneCall({
			phoneNumber
		});
	};

	/**
	 * 调用之前页面的onLoad，刷新页面，通常用在编辑，添加之后，刷新之前的列表
	 * @method initPrePage
	 * @param {Object} query	- 调用 onLoad 所传参数
	 * @param {Number} delta	- 之前几个页面 
	 * */
	Vue.prototype.initPrePage = (query = {}, delta = 1) => {
		let pages = getCurrentPages();
		let prePage = pages[pages.length - (delta + 1)];
		prePage.onLoad(query);
	};

	/**
	 * 权限判断，uni-app小程序不支持自定义指令，因此只能使用'v-if'代替。
	 * @method checkAuth
	 * @param {Number} auth		- 权限
	 * */
	Vue.prototype.checkAuth = (auth) => {
		return [1, 2, 3, 4].includes(auth);
	};

	/**
	 * 去某个页面
	 * @method toPage
	 * @param {String} url		- 页面路径
	 * @param {Object} param	- 参数 
	 * @param {String} method	- 调用方法['navigateTo', 'redirectTo', 'switchTab'] 
	 * */
	Vue.prototype.toPage = (url, param, method = 'navigateTo') => {
		if (param)
			url = url + encodeURIComponent(JSON.stringify(param));
		uni.navigateTo({
			url
		});
	};

	/**
	 * 解码参数
	 * @method decodeParam
	 * @param {String} param	- 编码之后的参数
	 * @return {Object}		- 解码之后的参数
	 * */
	Vue.prototype.decodeParam = (param) => {
		return JSON.parse(decodeURIComponent(param));
	};

	/**
	 * 将rpx转换为px
	 * @method upx2px
	 * @param {Number} rpx	- rpx
	 * @return {Number}		- px
	 * */
	Vue.prototype.upx2px = (rpx) => {
		return uni.upx2px(rpx);
	};

	/**
	 * 预览图片
	 * @method previewImage
	 * @param {Array} urls		- 预览图片数组
	 * @param {Number} index	- 预览图片index
	 * */
	Vue.prototype.previewImage = (urls, index) => {
		uni.previewImage({
			urls,
			index
		});
	};

	/**
	 * 克隆对象并删除某些属性
	 * @method deleteProperty
	 * @param {Object} oldObj		- 原始对象 
	 * @param {Array} properties	- 需要删除的属性数组 
	 * @return {Object} 
	 * */
	Vue.prototype.deleteProperty = (oldObj, properties) => {
		let obj = Object.assign({}, oldObj);
		properties.forEach(ele => {
			if (Object.hasOwnProperty(ele))
				delete obj[ele];
		});
		return obj;
	};

	/**
	 * 节流函数
	 * @method debounce
	 * @param {Function} fn		- 需要节流的函数 
	 * @param {Object} context	- 运行函数的作用域
	 * @param {Number} delay	- 延迟时间
	 * @param {Array} args		- 参数 
	 * @return {Function} 
	 * */
	Vue.prototype.throttle = (fn, context, delay, args) => {
		clearTimeout(fn.timeoutId);
		fn.timeoutId = setTimeout(() => {
			fn.apply(context, args);
		}, delay);
	};
	
};

export default {
	install
};
